package com.lmx.message;

import java.util.LinkedList;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.lmx.repoDomain.tmodel.Message;

/**
 * @author huibati 2017年3月24日
 */
public class MessageQueue {
	private Log logger = LogFactory.getLog(this.getClass());
	// 存储元素的LinkedList
	private LinkedList<Message> messageList = new LinkedList<Message>();// 普通通知消息队列

	private LinkedList<Message> warningMsgList = new LinkedList<Message>();// 预警消息队列

	// 添加元素的同步方法
	// public synchronized void addMessage(Message data) {
	public void addMessage(Message data) {
		logger.debug("addMessage " + data.getContent());
		messageList.addFirst(data);
		// 通知其他线程已有元素加入队列
		// notify();
	}

	// 取出元素的同步方法
	// public synchronized Message popMessage() {
	public Message popMessage() {
		// 如果队列为空，等待，等待其他线程添加元素
		if (messageList.isEmpty()) {
			for (int i = 0; i < 3; i++) {
				if (messageList.isEmpty()) {
					try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						logger.debug(" popMessage error " + e);
					}
				} else {
					logger.debug("getMessage " + messageList.getLast().getContent());
					return messageList.pollLast();
				}
			}
			return null;
		} else {
			logger.debug("getMessage " + messageList.getLast().getContent());
			return messageList.pollLast();
		}
	}

	// 添加元素的同步方法
	// public synchronized void addMessage(Message data) {
	public void addWarningMsg(Message data) {
		logger.debug("addwarningMsg " + data.getContent());
		warningMsgList.addFirst(data);
		// 通知其他线程已有元素加入队列
		// notify();
	}

	// 取出元素的同步方法
	// public synchronized Message popMessage() {
	public Message popWarningMsg() {
		// 如果队列为空，等待，等待其他线程添加元素
		if (warningMsgList.isEmpty()) {
			for (int i = 0; i < 3; i++) {
				if (warningMsgList.isEmpty()) {
					try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						logger.debug(" popWarningMsg error " + e);
					}
				} else {
					logger.debug("getwarningMsg " + warningMsgList.getLast().getContent());
					return warningMsgList.pollLast();
				}
			}
			return null;
		} else {
			logger.debug("getwarningMsgList " + warningMsgList.getLast().getContent());
			return warningMsgList.pollLast();
		}

	}

	// public synchronized Object popMessage() {
	// // 如果队列为空，则挂起当前线程，等待其他线程添加元素
	// while (messageList.isEmpty()) {
	// try {
	// wait();
	// } catch (InterruptedException ex) {
	// }
	// }
	// return messageList.removeLast();
	// }
	// ------------------------
	// public Object getMsg() {
	// synchronized (this) {
	// if (messageList != null && messageList.size() > 0) {
	// return messageList.removeLast();
	// }
	// return null;
	// }
	// }
	//
	// public Object addMsg(Object obj) {
	// synchronized(this) {
	// messageList.addFirst(obj);
	// }
	// return obj;
	// }

}
